Conventional database systems generate data backups and log backups during operation. These backups may be used to recover from database crashes, by restoring the database to the state of a data backup, and then replaying selected log backups in sequence. Modern systems change this paradigm by storing the data of an executing database instance in Storage Class Memory (SCM).
SCM is a non-volatile memory and therefore data stored in SCM remains unaffected before, during, and after a database crash. SCM may be implemented using flash-based memory connected to a processor vie PCIe interconnect technology, but other variants are known. SCM provides an intermediate step between high-performance Dynamic Random Access Memory (DRAM) and cost-effective hard disk drives (HDDs). SCM may provide read performance similar to DRAM and write performance that is significantly faster than HDD technology. Since a crash does not affect data stored in SCM, database recovery is extremely fast and simple as compared to conventional systems.
According to these implementations, data recovery is almost instantaneous. This improved recovery time is achieved at the cost of database throughput, since performance-enhancing data structures such as indexes are also stored in SCM, and read and write latencies of SCM are greater than those of Dynamic Random Access Memory (DRAM), in which the data structures may otherwise be stored. Some implementations attempt to improve this throughput by storing these data structures in DRAM and, after a crash, recovering the tabular data, rebuilding the DRAM-based secondary data structures based on the tabular data, and then accepting incoming requests.